<?php namespace Admin\Controller; 

use Common\Model\Cate;

//测试控制器
class CateController extends CommonController{
	private $db; //存的当前模型的句柄  
	
	
	//构造函数
//	__init效果和__construct类似
	public function __init(){
		
		$this->db=new Cate;
//		$this->db相当于句柄
//		实例化Common\Model\Cate中的Cate类
		
		parent::__init();
//		继承CommonController中的__init()
	}
	
    //动作
    public function index(){
    	
		$data=$this->db->orderBy('csort','DESC')->get();
//		get数据库中的信息，并降序排列
//		var_dump($data);die;
	
	
//	树状处理	
//		foreach($data as $k=>$v){
////			添加一个键名 productCount 记录分类下面商品的总数
////			如果分类下有商品的话，最好不要删除，否则可能报错
//			$data[$k]['productCount']=Db::table('article')->where('category_cid',$v['cid'])->count();
//		}		
		$data=Data::tree($data,'cname');			
		
//		在执行树桩结构处理之后，会多一个_name树状结构的名称
//		var_dump($data);die;
		
//		相当于$this->assign('data',$data);		
		View::with('data',$data);
		
       View::make();
    }
	


	public function add(){
		$typeModel=new \Common\Model\Type;
		
		$typeData=$typeModel->orderBy('tid','ASC')->get();
//		var_dump($typeData);die;
		View::with('typeData',$typeData);
		
		if(IS_POST){
//			var_dump($_POST);die;
			$result=$this->db->store();
//			调用Cate类中的store()
			if(!$result){
				
				View::error($this->db->getError());
//				调用Model中的getError()方法  里边储存了$validate返回的错误信息
			}
			View::success('添加成功',U('index'));
		}
			
		View::make();
		
	}


	public function addSon(){
		$typeModel=new \Common\Model\Type;
		
		$typeData=$typeModel->orderBy('tid','ASC')->get();
//		var_dump($typeData);die;
		View::with('typeData',$typeData);
//		注意添加子类和添加分类的处理方式是一样的，可以调用相同的模型处理方法
		if(IS_POST){
			$result=$this->db->store();
//			调用Cate类中的store()
			if(!$result){
				
				View::error($this->db->getError());
//				调用Model中的getError()方法  里边储存了$validate返回的错误信息
			}
			View::success('添加成功',U('index'));
		}
		
//		把get到的父类的cid在页面上赋给子类的pid 这样父类和子类就有关联  再执行树桩结构处理后会做相应的改变
		$cid=Q('get.cid',0,'intval');
//		把获取的cid的数据类型转化为int

//		field()获取需要的字段
		$parent=$this->db->field('cid,cname')->where('cid',$cid)->find();
//		获取父类的cid,cname 在addSon页面上调用 
		View::with('parent',$parent);		
		
		View::make();
	}


//	删除方法
	public function del(){

//		获取要删除的分类id
//		把获取的cid转化为int数据类型
		$cid=Q('get.cid',0,'intval');
		
//		1获取要删除的分类的pid
//		获取的是一个字段时用pluck
		$pid=$this->db->where('cid',$cid)->pluck('pid');
//		var_dump($pid);die;
//		2将它所有的子类的pid改变成要删除的父类的pid
		$data=array('pid'=>$pid);
		$this->db->where('pid',$cid)->update($data);
		
//		删除指定分类
		$this->db->where('cid',$cid)->delete();
		
		View::success('删除成功',U('index'));
		
	}
	
	
	//	分类编辑
	public function edit(){
		$typeModel=new \Common\Model\Type;
		
		$typeData=$typeModel->orderBy('tid','ASC')->get();
//		var_dump($typeData);die;
		View::with('typeData',$typeData);
		
		if(IS_POST){
//			打印所有数据
//			将当前编辑的分类的主键id通过post条件提交过来
//				1.在页面创建隐藏域，将当前的主键分配到隐藏域中
//			var_dump($_POST);die;
			$result=$this->db->edit();
			if(!$result){
//				$this->db->getError()//获取模型中过滤失败的错误消息
				View::error($this->db->getError());
			}
			View::success('编辑成功',U('index'));
			
		}
		
		
//		echo 'cateedit';die;
//		var_dump($_GET);die;
//		获取cid,编辑的是哪一个
		$cid=Q('get.cid',0,'intval');
//		var_dump($cid);die;
//		获取所有原数据
		$oldData=$this->db->where('cid',$cid)->find();
//var_dump($oldData);die;
		View::with('oldData',$oldData);
		
//		处理编辑的所属分类
//		分类编辑时候不能是当前分类本身或他的子集
//		将获取数据动作放到模型类中
		$parentData=$this->db->getNoMy($cid);
		View::with('parentData',$parentData);
		View::make();
	}
	



}
